"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const jwt = require("jsonwebtoken");
const config_1 = require("./config/config");
function middle(app) {
    //app.use可以看作是一个路由守卫，请求会先进入use方法，如果use方法返回false，则不会进入下一个方法
    //如果执行next()可以进行下一个方法，一般可以做一些请求拦截
    //比如token校验
    //   设置不需要校验token的url路径(白名单)
    let whiteUrl = /(\/api\/login)|(\/api\/loginblogUser)/;
    app.use(function (req, res, next) {
        // 如果符合白名单路由，则直接进入下一个办法
        if (whiteUrl.test(req.url)) {
            next();
            return;
        }
        const { authorization } = req.headers;
        console.log(authorization);
        //如果没有token，则返回403并且提醒用户没有token
        if (!authorization) {
            res.status(403).send({ success: false, message: "没有token" });
            return;
        }
        jwt.verify(authorization, config_1.tokenKey, function (err, result) {
            if (err) {
                res.status(403).send({ success: false, message: "token无效" });
                return;
            }
            //id是token加密的用户id，iat是当前的时间戳，exp token设置的过期时间
            const { id, iat, exp } = result;
            console.log(id);
            if (exp < iat) {
                // 如果token的过期时间小于当前时间说明token已经过期
                res.status(403).send({ success: false, message: "token过期" });
                return;
            }
            //    给req对象添加一个uid属性存储用户id 后面的路由如果要用当前登录的id值
            //   直接从req中取id
            req.uids = id;
            next();
        });
    });
}
exports.default = middle;
